"""
此模块用于测试蜂鸣器功能。程序会控制蜂鸣器按不同频率和占空比发出声音，
可根据实际情况修改相关参数进行测试。
导入库：导入 gpiozero 库中的 PWMOutputDevice 类用于控制蜂鸣器，time 库用于控制时间。
初始化蜂鸣器：定义蜂鸣器连接的 GPIO 引脚号，使用 PWMOutputDevice 类初始化蜂鸣器对象。
定义测试函数：test_buzzer 函数中，设置了不同的频率和占空比组合，依次让蜂鸣器按这些设置发声，每次发声持续 2 秒，发声间隔 1 秒。
异常处理：使用 try-except-finally 结构捕获 KeyboardInterrupt 异常（即用户按下 Ctrl+C），确保程序终止时蜂鸣器关闭并释放资源。
主程序：调用 test_buzzer 函数开始测试。
"""
from gpiozero import PWMOutputDevice
import time

# 定义蜂鸣器连接的 GPIO 引脚，假设连接到 GPIO 22
BUZZER_PIN = 22
# 初始化蜂鸣器，使用 PWM 控制
buzzer = PWMOutputDevice(BUZZER_PIN)

def test_buzzer():
    """
    测试蜂鸣器功能，控制蜂鸣器按不同频率和占空比发声。
    """
    try:
        print("开始测试蜂鸣器...")
        # 测试不同频率和占空比
        test_settings = [
            (1000, 0.5),  # 频率 1000Hz，占空比 0.5
            (2000, 0.3),  # 频率 2000Hz，占空比 0.3
            (500, 0.7)    # 频率 500Hz，占空比 0.7
        ]

        for frequency, duty_cycle in test_settings:
            print(f"设置频率: {frequency}Hz，占空比: {duty_cycle}")
            buzzer.frequency = frequency  # 设置频率
            buzzer.value = duty_cycle     # 设置占空比
            time.sleep(2)  # 持续 2 秒
            buzzer.off()  # 关闭蜂鸣器
            time.sleep(1)  # 暂停 1 秒

        print("蜂鸣器测试完成。")
    except KeyboardInterrupt:
        print("用户中断测试，程序终止。")
    finally:
        buzzer.off()  # 确保蜂鸣器关闭
        buzzer.close()  # 释放资源

if __name__ == "__main__":
    test_buzzer()
